package com.lcm.basic.p6.gc.reference;

import java.lang.ref.WeakReference;

/**
 * @author Coder-lcm
 * @date 2021/4/3
 *  弱引用示例
 *      (1)说明：
 *          弱引用通过【 WeakReference类】实现,弱引用和软引用很像,但弱引用的引用级别更低。对于只有
 *      弱引用的对象而言,当系统垃圾回收机制运行时,不管系统内存是否足够,总会回收该对象所占用的
 *      内存。当然,并不是说当一个对象只有弱引用时,它就会立即被回收—正如那些失去引用的对象一
 *      样,必须等到系统垃圾回收机制运行时才会被回收。
 *
 */
public class WeakReferenceDemo {

    public static void main(String[] args) {
        String str = new String("疯狂Java讲义");
        //创建一个 字符串str的弱引用对象
        WeakReference strWr = new WeakReference(str);
        // 让 “疯狂Java讲义” 失活，使其具备被gc的条件
        str = null;
        System.out.println(str); // null
        System.out.println("弱引用对象: " + strWr.get()); //疯狂Java讲义

        //强制进行gc
        System.gc();

        System.out.println("弱引用对象：" + strWr.get()); // null，已被gc
    }
}
